package com.office.workflow.service;

import com.office.workflow.domain.Workflow;
import com.office.workflow.domain.WorkflowNode;
import com.office.workflow.domain.WorkflowLink;
import com.office.workflow.domain.WorkflowInstance;

import java.util.List;
import java.util.Map;

/**
 * 工作流Service接口
 * 
 * @author 数字牧马人
 */
public interface WorkflowService 
{
    /**
     * 查询工作流列表
     * 
     * @param workflow 工作流
     * @return 工作流集合
     */
    public List<Workflow> selectWorkflowList(Workflow workflow);

    /**
     * 查询工作流
     * 
     * @param id 工作流主键
     * @return 工作流
     */
    public Workflow selectWorkflowById(Long id);

    /**
     * 新增工作流
     * 
     * @param workflow 工作流
     * @return 结果
     */
    public int insertWorkflow(Workflow workflow);

    /**
     * 修改工作流
     * 
     * @param workflow 工作流
     * @return 结果
     */
    public int updateWorkflow(Workflow workflow);

    /**
     * 批量删除工作流
     * 
     * @param ids 需要删除的工作流主键集合
     * @return 结果
     */
    public int deleteWorkflowByIds(Long[] ids);

    /**
     * 删除工作流信息
     * 
     * @param id 工作流主键
     * @return 结果
     */
    public int deleteWorkflowById(Long id);

    /**
     * 保存工作流设计（包含节点和连线）
     * 
     * @param workflow 工作流
     * @return 结果
     */
    public int saveWorkflowDesign(Workflow workflow);

    /**
     * 获取工作流设计数据
     * 
     * @param id 工作流ID
     * @return 工作流设计数据
     */
    public Workflow getWorkflowDesign(Long id);

    /**
     * 执行工作流
     * 
     * @param workflowId 工作流ID
     * @param inputParams 输入参数
     * @return 执行结果
     */
    public Map<String, Object> executeWorkflow(Long workflowId, Map<String, Object> inputParams);

    /**
     * 查询工作流执行实例列表
     * 
     * @param instance 实例
     * @return 实例集合
     */
    public List<WorkflowInstance> selectWorkflowInstanceList(WorkflowInstance instance);

    /**
     * 查询工作流执行实例
     * 
     * @param id 实例主键
     * @return 实例
     */
    public WorkflowInstance selectWorkflowInstanceById(Long id);

    /**
     * 删除工作流执行实例
     * 
     * @param id 实例主键
     * @return 结果
     */
    public int deleteWorkflowInstanceById(Long id);

    /**
     * 批量删除工作流执行实例
     * 
     * @param ids 需要删除的实例主键集合
     * @return 结果
     */
    public int deleteWorkflowInstanceByIds(Long[] ids);

    /**
     * 导入工作流
     * 
     * @param workflowData 工作流数据
     * @return 结果
     */
    public int importWorkflow(Map<String, Object> workflowData);

    /**
     * 导出工作流
     * 
     * @param id 工作流ID
     * @return 工作流数据
     */
    public Map<String, Object> exportWorkflow(Long id);
} 